package com.liugui.springbootexceptionhandler.utils;

import com.liugui.springbootexceptionhandler.exception.BusinessException;
import com.liugui.springbootexceptionhandler.exception.SystemException;
import com.liugui.springbootexceptionhandler.vo.ResultVO;

/**
 * @ClassName: ExceptionUtils
 * @Author: liugui
 * @Date: 2020-06-25 22:24
 **/
public class ExceptionUtils {

    /**
     * 业务处理异常
     * @param errCode   异常码
     * @return
     */
    public static BusinessException businessException(String errCode) {
        return new BusinessException(createResultVO(errCode));
    }

    /**
     * 业务处理异常
     * @param errCode   自定义异常码
     * @param msg   自定义异常提示
     * @return
     */
    public static BusinessException businessException(String errCode, String msg) {
        return new BusinessException(createResultVO(errCode, msg));
    }

    /**
     * 业务处理异常
     * @param errCode   异常码
     * @param args  错误描述信息中的参数
     * @return
     */
    public static BusinessException businessException(String errCode, String... args) {
        return new BusinessException(createResultVO(errCode, args));
    }

    /**
     * 系统级异常
     * @param errCode   异常码
     * @return
     */
    public static SystemException systemException(String errCode) {
        return new SystemException(createResultVO(errCode));
    }

    /**
     * 业务处理异常
     * @param errCode   自定义异常码
     * @param msg   自定义异常提示
     * @return
     */
    public static SystemException systemException(String errCode, String msg) {
        return new SystemException(createResultVO(errCode, msg));
    }

    /**
     * 系统级异常
     * @param errCode   异常码
     * @param args  错误描述信息中的参数
     * @return
     */
    public static SystemException systemException(String errCode, String... args) {
        return new SystemException(createResultVO(errCode, args));
    }

    private static ResultVO createResultVO(Integer errCode) {
        return new ResultVO(errCode, getErrorMsg(errCode));
    }

    private static ResultVO createResultVO(Integer errCode, String msg) {
        return new ResultVO(errCode, msg);
    }

    private static ResultVO createResultVO(Integer errCode, String[] args) {
        return new ResultVO(errCode, getErrorMsg(errCode, args));
    }

    /**
     * 获取错误信息
     * @param errCode   错误码
     * @return
     */
    private static String getErrorMsg(Integer errCode) {
        return ErrorUtils.getErrorDesc(errCode);
    }

    /**
     * 获取错误信息
     * @param errCode   错误码
     * @param args  错误描述信息中的参数
     * @return
     */
    private static String getErrorMsg(Integer errCode, String[] args) {
        return ErrorUtils.getParseErrorDesc(errCode, args);
    }

}
